package com.leyou.trade.service.impl;

import com.leyou.auth.utils.UserContext;
import com.leyou.trade.entity.Cart;
import com.leyou.trade.repository.CartRepository;
import com.leyou.trade.service.CartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Service
public class CartServiceImpl implements CartService {

    @Autowired
    private CartRepository cartRepository;

    @Override  //商品添加购物车
    public void addCatr(Cart cartItem) {
        // 1.获取用户信息
        Long userId = UserContext.getUser().getId();
        // 2.查询购物车商品
        String id = createId(cartItem.getSkuId());

        Optional<Cart> optional = cartRepository.findById(id);

        // 3.判断购物车中是否存在与要添加的商品id一致的商品
        if (optional.isPresent()) {
            // 2.1.存在，记录新的商品数量
            Integer num = cartItem.getNum();
            // 2.2.获取旧的数据
            cartItem = optional.get();
            // 2.3.数量累加
            cartItem.setNum(num + cartItem.getNum());
        }
        // 4.补充数据，id、userId、时间
        cartItem.setId(id);
        cartItem.setUserId(userId);
        cartItem.setUpdateTime(new Date());
        // 5.写入db
        cartRepository.save(cartItem);

    }

    @Override   //查询购物车
    public List<Cart> listCart() {
        List<Cart> byUserId = cartRepository.findByUserId(UserContext.getUser().getId());
        System.out.println(byUserId);
        return byUserId;
    }

    @Override   //删除购物车
    public void deleteCart(Long skuId) {
        cartRepository.deleteByskuId(skuId);
    }

    @Override   //合并购物车
    public void addCartItemList(List<Cart> cartItems) {
        // 1.获取用户信息
        Long userId = UserContext.getUser().getId();
        List<Cart> list = cartItems.stream().map(item -> handleUpdateItem(userId, item)).collect(Collectors.toList());
        // 3.新增或修改
        cartRepository.saveAll(list);
    }

    private String createId(Long skuId) {
        return String.format("u%ds%d", UserContext.getUser().getId(), skuId);
    }

    private Cart handleUpdateItem(Long userId, Cart cartItem) {
        //根据商品id查询
        Optional<Cart> optional = cartRepository.findById(createId(cartItem.getSkuId()));
        //判断是否已经在购物车中存在
        if (optional.isPresent()) {
            //不为空 说明存在  记录并添加新商品的数量
            Integer num = cartItem.getNum();
            //旧数量
            Integer num1 = optional.get().getNum();
            cartItem.setNum(num + num1);
            cartRepository.deleteByskuId(cartItem.getSkuId());
        }
        //想数据库添加商品
        cartItem.setUserId(userId);
        cartItem.setUpdateTime(new Date());
        return cartItem;

    }

}
